{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "任务描述 请在 Pima Indians Diabetes Data Set（皮马印第安人糖尿病数据集）进行分类器练 习。 \n",
    " \n",
    "需要提交代码文件，并给出必要的结果解释。 1) 训练数据和测试数据分割（随机选择 20%的数据作为测试集）；（ 10 分） 2) 适当的特征工程（及数据探索）;（10 分） 3) Logistic 回归，并选择最佳的正则函数（L1/L2）及正则参数；（30 分） 4) 线性 SVM，并选择最佳正则参数，比较与 Logistic 回归的性能，简单说明原因。 （20 分） 5) RBF 核的 SVM，并选择最佳的超参数（正则参数、RBF 核函数宽度）；（ 30 分）\n",
    "\n",
    "Pregnancies： 怀孕次数 \n",
    "Glucose： 口服葡萄糖耐受试验中，2 小时的血浆葡萄糖浓度。 \n",
    "BloodPressure： 舒张压（mm Hg） \n",
    "SkinThickness： 三头肌皮肤褶层厚度（mm） \n",
    "Insulin：2 小时血清胰岛素含量（μU/ ml）\n",
    "BMI： 体重指数（体重，kg /（身高，m）^ 2） 2) \n",
    "DiabetesPedigreeFunction： 糖尿病家族史 3) \n",
    "Age： 年龄（岁） \n",
    "Outcome： 输出变了/类别标签（0 或 1，出现糖尿病为 1, 否则为 0） \n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "#SVM并不能直接输出各类的概率，所以在这个例子中我们用正确率作为模型预测性能的度量\n",
    "from sklearn.metrics import accuracy_score\n",
    "#竞赛的评价指标为logloss\n",
    "from sklearn.metrics import log_loss  \n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "读取数据 & 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读取数据并显示前几行\n",
    "train = pd.read_csv(\"diabetes.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "#整体数据情况\n",
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  120.894531      69.105469      20.536458   79.799479   \n",
       "std       3.369578   31.972618      19.355807      15.952218  115.244002   \n",
       "min       0.000000    0.000000       0.000000       0.000000    0.000000   \n",
       "25%       1.000000   99.000000      62.000000       0.000000    0.000000   \n",
       "50%       3.000000  117.000000      72.000000      23.000000   30.500000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    31.992578                  0.471876   33.240885    0.348958  \n",
       "std      7.884160                  0.331329   11.760232    0.476951  \n",
       "min      0.000000                  0.078000   21.000000    0.000000  \n",
       "25%     27.300000                  0.243750   24.000000    0.000000  \n",
       "50%     32.000000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## 各属性的统计特性\n",
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Outcome 分布，看看各类样本分布是否均衡\n",
    "sns.countplot(train.Outcome);\n",
    "pyplot.xlabel('Outcome');\n",
    "pyplot.ylabel('Number of Outcome');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Age 分布\n",
    "pyplot.figure(figsize=(20, 10))\n",
    "sns.countplot(train.Age);\n",
    "pyplot.xlabel('Age');\n",
    "pyplot.ylabel('Number of Age');\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 936x648 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#数据关联性分析\n",
    "y_train = train['Outcome']   #形式为0 or  1\n",
    "X_train = train.drop([\"Outcome\"], axis=1)\n",
    "\n",
    "#get the names of all the columns\n",
    "cols=X_train.columns \n",
    "# Calculates pearson co-efficient for all combinations，通常认为相关系数大于0.5的为强相关\n",
    "data_corr = X_train.corr().abs()\n",
    "pyplot.subplots(figsize=(13, 9))\n",
    "\n",
    "sns.heatmap(data_corr,annot=True)\n",
    "# Mask unimportant features\n",
    "sns.heatmap(data_corr, mask=data_corr < 1, cbar=True)\n",
    "pyplot.savefig('diabetes_coor.png' )\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到各个特征之间的关联性并不强"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/preprocessing/data.py:617: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
      "  return self.partial_fit(X, y)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/base.py:462: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by StandardScaler.\n",
      "  return self.fit(X, **fit_params).transform(X)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/model_selection/_split.py:2069: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "\n",
    "\n",
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "#X_test = ss_X.transform(X_test)\n",
    "\n",
    "\n",
    "# 训练样本用train_test_split估计模型性能, 80%作为训练样本，20%作为验证样本\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size = 0.8,random_state = 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型训练\n",
    "logistic回归的需要调整超参数有：C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和正则函数penalty（L2/L1） 目标函数为：J = sum(logloss(f(xi), yi)) + C* penalty\n",
    "\n",
    "在sklearn框架下，不同学习器的参数调整步骤相同： 设置候选参数集合 调用GridSearchCV 调用fit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise-deprecating',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='warn',\n",
       "          n_jobs=None, penalty='l2', random_state=None, solver='warn',\n",
       "          tol=0.0001, verbose=0, warm_start=False),\n",
       "       fit_params=None, iid='warn', n_jobs=None,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#logistic回归模型\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "lr_penalty= LogisticRegression()\n",
    "\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters,cv=5, scoring='neg_log_loss')\n",
    "grid.fit(X_train,y_train)\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/vincent/.local/lib/python3.6/site-packages/sklearn/utils/deprecation.py:125: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([0.00180402, 0.00179753, 0.0016603 , 0.00184431, 0.00263104,\n",
       "        0.00482097, 0.002249  , 0.00207067, 0.00238199, 0.00308962,\n",
       "        0.00360708, 0.00268331, 0.00280023, 0.00286927]),\n",
       " 'std_fit_time': array([7.44403294e-04, 1.38736884e-04, 4.73803848e-04, 6.76684851e-05,\n",
       "        5.93863985e-04, 3.15839886e-03, 2.82776737e-04, 1.77214398e-04,\n",
       "        3.15253681e-04, 4.54446211e-04, 8.81871159e-04, 1.06699405e-03,\n",
       "        2.91923470e-04, 1.30334110e-03]),\n",
       " 'mean_score_time': array([0.00128398, 0.00110974, 0.00102148, 0.00108509, 0.00153565,\n",
       "        0.00127087, 0.00102925, 0.00100365, 0.00163198, 0.00181656,\n",
       "        0.00182753, 0.00115752, 0.0017395 , 0.00121355]),\n",
       " 'std_score_time': array([0.00043987, 0.00012877, 0.00012962, 0.0001953 , 0.0003412 ,\n",
       "        0.0003539 , 0.00024605, 0.00017916, 0.00142301, 0.00064897,\n",
       "        0.00064811, 0.00013194, 0.00045025, 0.00022934]),\n",
       " 'param_C': masked_array(data=[0.001, 0.001, 0.01, 0.01, 0.1, 0.1, 1, 1, 10, 10, 100,\n",
       "                    100, 1000, 1000],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_penalty': masked_array(data=['l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1',\n",
       "                    'l2', 'l1', 'l2', 'l1', 'l2'],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'split0_test_score': array([-0.69314718, -0.63247716, -0.64643499, -0.51842729, -0.49334935,\n",
       "        -0.4893871 , -0.49423967, -0.49442383, -0.49549681, -0.49553449,\n",
       "        -0.49564633, -0.49565533, -0.49566378, -0.49566752]),\n",
       " 'split1_test_score': array([-0.69314718, -0.64153853, -0.65138433, -0.54263843, -0.51621506,\n",
       "        -0.50836483, -0.50930244, -0.50834194, -0.50875007, -0.50865995,\n",
       "        -0.50870382, -0.5086969 , -0.50870355, -0.50870065]),\n",
       " 'split2_test_score': array([-0.69314718, -0.63662203, -0.64570415, -0.52403018, -0.47822709,\n",
       "        -0.48374951, -0.48180215, -0.4830274 , -0.48313319, -0.48326216,\n",
       "        -0.48327358, -0.48329051, -0.48328905, -0.4832934 ]),\n",
       " 'split3_test_score': array([-0.69314718, -0.63189062, -0.64433664, -0.50307754, -0.45405741,\n",
       "        -0.44275292, -0.4366122 , -0.43615578, -0.43569288, -0.43565059,\n",
       "        -0.4356073 , -0.43560284, -0.43559738, -0.43559809]),\n",
       " 'split4_test_score': array([-0.69314718, -0.64067605, -0.64757466, -0.53287257, -0.49692761,\n",
       "        -0.48956528, -0.4881062 , -0.48793522, -0.48808663, -0.48807935,\n",
       "        -0.48810111, -0.48809877, -0.48810709, -0.48810077]),\n",
       " 'mean_test_score': array([-0.69314718, -0.63664181, -0.6470899 , -0.52422544, -0.48778724,\n",
       "        -0.48280717, -0.48206371, -0.48202874, -0.48228489, -0.48229036,\n",
       "        -0.48231958, -0.48232204, -0.48232535, -0.48232527]),\n",
       " 'std_test_score': array([1.11022302e-16, 4.00318135e-03, 2.39292199e-03, 1.33688676e-02,\n",
       "        2.07334276e-02, 2.16460757e-02, 2.44406574e-02, 2.44134571e-02,\n",
       "        2.47944554e-02, 2.47956827e-02, 2.48343612e-02, 2.48355509e-02,\n",
       "        2.48402971e-02, 2.48395553e-02]),\n",
       " 'rank_test_score': array([14, 12, 13, 11, 10,  9,  2,  1,  3,  4,  5,  6,  8,  7],\n",
       "       dtype=int32),\n",
       " 'split0_train_score': array([-0.69314718, -0.63735556, -0.64699594, -0.5192309 , -0.47577796,\n",
       "        -0.46925194, -0.46602436, -0.46594583, -0.46589353, -0.46589258,\n",
       "        -0.46589203, -0.46589201, -0.46589201, -0.46589201]),\n",
       " 'split1_train_score': array([-0.69314718, -0.63310132, -0.63649244, -0.51411049, -0.47224287,\n",
       "        -0.46704903, -0.46420487, -0.46410775, -0.46406264, -0.4640616 ,\n",
       "        -0.46406112, -0.46406111, -0.4640611 , -0.4640611 ]),\n",
       " 'split2_train_score': array([-0.69314718, -0.6356616 , -0.65056852, -0.51951737, -0.47886826,\n",
       "        -0.47222043, -0.46932983, -0.46925675, -0.46921156, -0.46921058,\n",
       "        -0.4692101 , -0.46921009, -0.46921008, -0.46921008]),\n",
       " 'split3_train_score': array([-0.69314718, -0.63804443, -0.65182756, -0.52743851, -0.48993872,\n",
       "        -0.48357524, -0.48097767, -0.48088442, -0.48084376, -0.48084284,\n",
       "        -0.48084241, -0.4808424 , -0.4808424 , -0.48084239]),\n",
       " 'split4_train_score': array([-0.69314718, -0.63358836, -0.646171  , -0.51771935, -0.47759603,\n",
       "        -0.47164861, -0.46882406, -0.46875047, -0.46870586, -0.46870513,\n",
       "        -0.46870465, -0.46870464, -0.46870464, -0.46870464]),\n",
       " 'mean_train_score': array([-0.69314718, -0.63555025, -0.64641109, -0.51960333, -0.47888477,\n",
       "        -0.47274905, -0.46987216, -0.46978904, -0.46974347, -0.46974255,\n",
       "        -0.46974206, -0.46974205, -0.46974205, -0.46974205]),\n",
       " 'std_train_score': array([0.        , 0.00196666, 0.00539262, 0.00436479, 0.00596017,\n",
       "        0.00571694, 0.00585916, 0.0058569 , 0.00585952, 0.00585954,\n",
       "        0.00585957, 0.00585957, 0.00585957, 0.00585957])}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.4820287373783356\n",
      "{'C': 1, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'neg-logloss' )\n",
    "pyplot.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图给出了L1正则和L2正则下、不同正则参数C对应的模型在训练集上测试集上的正确率（score）。可以看出在训练集上C越大（正则越少）的模型性能越好；但在测试集上当C=10时性能最好（L1正则和L2正则均是）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 用LogisticRegressionCV实现正则化的 Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[1, 10, 100, 1000], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=None, penalty='l1',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [1, 10,100,1000]\n",
    "\n",
    "# 大量样本（6W+）、高维度（93），L1正则 --> 可选用saga优化求解器(0.19版本新功能)\n",
    "# LogisticRegressionCV比GridSearchCV快\n",
    "lrcv_L1 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l1', solver='liblinear', multi_class='ovr')\n",
    "lrcv_L1.fit(X_train, y_train)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.49423586, -0.49550849, -0.49564824, -0.4956621 ],\n",
       "        [-0.50930018, -0.50874901, -0.50871016, -0.50870431],\n",
       "        [-0.48179902, -0.48313634, -0.48327634, -0.48329749],\n",
       "        [-0.4366163 , -0.43568867, -0.43560606, -0.43559626],\n",
       "        [-0.48810729, -0.48808935, -0.48809948, -0.488101  ]])}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L1.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Each dict value has shape (n_folds, len(Cs))\n",
    "n_Cs = len(Cs)\n",
    "n_outcome = 2\n",
    "scores =  np.zeros((n_outcome-1,n_Cs))\n",
    "\n",
    "for j in range(n_outcome-1):\n",
    "        scores[j][:] = np.mean(lrcv_L1.scores_[1],axis = 0)\n",
    "    \n",
    "mse_mean = -np.mean(scores, axis = 0)\n",
    "pyplot.plot(np.log10(Cs), mse_mean.reshape(n_Cs,1)) \n",
    "#plt.plot(np.log10(reg.Cs)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "pyplot.xlabel('log(C)')\n",
    "pyplot.ylabel('neg-logloss')\n",
    "pyplot.show()\n",
    "\n",
    "#print ('C is:',lr_cv.C_)  #对多类分类问题，每个类别的分类器有一个C"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "和GridSearchCV得到的Score不一样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.40482696,  1.10208814, -0.23906499,  0.        , -0.12013262,\n",
       "         0.6883333 ,  0.30157772,  0.1675731 ]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L1.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[1, 10, 100, 1000], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=None, penalty='l2',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#L2正则函数\n",
    "\n",
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [1, 10,100,1000]\n",
    "\n",
    "# 大量样本（6W+）、高维度（93），L2正则 --> 缺省用lbfgs，为了和GridSeachCV比较，也用liblinear\n",
    "\n",
    "lr_cv_L2 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l2', solver='liblinear', multi_class='ovr')\n",
    "lr_cv_L2.fit(X_train, y_train) \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.49442383, -0.49553449, -0.49565533, -0.49566752],\n",
       "        [-0.50834194, -0.50865995, -0.5086969 , -0.50870065],\n",
       "        [-0.4830274 , -0.48326216, -0.48329051, -0.4832934 ],\n",
       "        [-0.43615578, -0.43565059, -0.43560284, -0.43559809],\n",
       "        [-0.48793522, -0.48807935, -0.48809877, -0.48810077]])}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_cv_L2.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEKCAYAAAAiizNaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvDW2N/gAAIABJREFUeJzt3XmcVNWd///Xu5tmR5DFhc0GRRQUFDsEozFGYzSuMzEmxpjoZDGZ6C8mMcnojKNxydc4McxkMYlO1NHE0ThqEhCX4Bpj4tIYQbsbsAVlEQRFaJCtl8/vj7qNRQt0gV11q7rfz8ejHtzlnFufQ8H91L3n1LmKCMzMzAqlLO0AzMysa3HiMTOzgnLiMTOzgnLiMTOzgnLiMTOzgnLiMTOzgnLiMTOzgnLiMTOzgnLiMTOzguqWdgDFaPDgwVFZWZl2GGZmJWXWrFlvRsSQ9so58WxDZWUl1dXVaYdhZlZSJL2WSznfajMzs4Jy4jEzs4Jy4jEzs4Jy4jEzs4Jy4jEzs4Jy4jEzs4Jy4jEzs4Ly73jMzEpERNDcEjS1BJubW2hqDpqaW7YsNza30Jj82dSStdwcbcq00NTSpnxzC5ubg/337MvJE4bmtR1OPGbWpbSevBubg8aWFhqbMifhzcmfOzqRb24Kmlq2fSJvTJJAY8u7J/LG7BN9c2T2NSXHai3fWrelhcamJKY277/lWC0tROT37+eUiUOdeMysc2luCV5esZZ5y9eyqbGFxpZtnOSb3z0xv/vtPvcTedOWpBJJwtj6G36+VZSLbmVlVJSLivIyKsrL6LZlOdnXrYyKssy2nhWie1KmW3lZZrlMW5XpVv7u8bqVq02ZrY/ftnxFa9m229rGVC4k5f3vx4nHzPImIli0aj2zl6xhzuLVzF6ympeWNrChsbndultOoGWie7ey5GQtKsrePWlmTtKZk2av7tkn6awT6jZO5N2SE2/2iXyr9bJtnOS32v/uyXur9ygX3coKc/IuZU48ZtZhVqzdyJzFa5i9ZHUm2SxZzer1jQB071bG+KG78ZkPjGDiiP6M27s/vbuXJ0nl3W/uFeWi3CfvTs2Jx8x2ScPGRl5ckkkyrclm2ZqNAJQJ9t+zH8eP24sJI/ozcfgAxu7Vj4pyD6Q1Jx4zy8HGxmZqlzUkt8sySWbByne27N9nUG+qKgcycXh/Jo4YwPihu9G7u08vtm3+l2FmW2lqbqF+5TpmL373dtncZWtpasl0yg/p14OJwwfwj4cMY8KIAUwY1p/d+3RPOWorJU48Zl1Ye53//Xp2Y8Lw/nzlqNFMHD6AiSP6s9duPd3/Yu+LE49ZF7Iznf8Thg9g1KA+lJU5yVjHcuIx66SyO/9nL17NnCVr3PlvRcGJx6wTaO38b00w2+r8/0DlQCa489+KQF7/5Uk6AfgJUA78OiJ+uJ1ypwN3Ax+IiGpJFcCvgUlJjLdFxDWSRgC3AXsCAdwYET9JjvEj4BRgM/AK8E8RsVpSJVAHzEve7umI+Fo+2mtWCE3NLby8Yh1zkttlsxevZt7ybXf+TxwxgAnD+zOgtzv/rXjkLfFIKgeuB44DlgDPSZoWEbVtyvUDLgSeydp8BtAjIg6W1BuolXQHsAm4KCKeT+rNkjQzOeZM4JKIaJJ0LXAJ8C/J8V6JiEPy1VazfGnt/H8huZKZs53O//OOGs0Ed/5bicjnFc9koD4iFgBIuhM4DahtU+4q4Frgu1nbAugjqRvQi8xVTENErAKWAUTEWkl1wDCgNiL+lFX/aeBTHd8ks/xa0bBxS6f/C4tX8+LSNVt1/h+U1fk/cfgAKt35byUon4lnGLA4a30J8MHsApImASMiYoak7MRzN5kktQzoDXwrSTrZdSuBQ9n6SqnVF4HfZa2PkvR3oAG4NCKe3JUGmXWk1s7/zNXM9jv/W2+XufPfOovUehcllQFTgXO3sXsy0AwMBXYHnpT0cNbVU1/gHuCbEdHQ5rj/BjQBtyeblgEjI+ItSYcBf5A0fhv1zgPOAxg5cmTHNNIssbGxmZrXG7YkmNmLV7PgTXf+W9eUz3/ZS4ERWevDk22t+gEHAY8n96P3AqZJOhU4C3gwIhqBFZKeAqqABcnAg3uA2yPi3uw3lHQucDJwbETmqRURsYlM3xARMUvSK8D+QHV23Yi4EbgRoKqqKv/zplunld35/8LizG2zbXb+H+rOf+ua8pl4ngPGSBpFJuGcSSahABARa4DBreuSHge+k4xqOxY4BviNpD7AFOC/lMlQNwF1ETE1+82SEXTfAz4SEeuztg8BVkVEs6TRwBhgQT4abF2PO//Ndl7eEk8yuuwC4CEyw6lvjogaSVcC1RExbQfVrwdukVQDCLglIuZIOhL4PPCipBeSsv8aEfcDPwd6ADOT/9Stw6aPAq6U1Ai0AF9r219klqsddf73yPrl/yHJlYw7/83eS5Hv56iWoKqqqqiurm6/oHVqO+r8Ly8TY/bomyQYd/6bAUiaFRFV7ZVz76UZW3f+t/76P7vzvzKr8/+QEQMYP7Q/vbqXpxixWely4rEup7XzP3va/+zO/z369WDC8AF8ctKwLVcz7vw36zhOPNbprVnfyOPzV2wZxlzz+tad/xOHD9jS+X/IiAHs1b9nyhGbdW5OPNapNTa3cMYNf2X+G+vc+W9WJJx4rFO79a+vMv+NdUz99EROmTjUnf9mRcCJxzqtN9dt4icPv8xR+w/hHw8d5t/OmBUJf/2zTuu6h+axobGZy04e56RjVkSceKxTemnpGn5XvZhzPlTJfnv0TTscM8vixGOdTkTw/Wk1DOzdnW8cOybtcMysDSce63SmzX6d6tfe5rvHj6V/r4q0wzGzNpx4rFNZv7mJa+6fy0HDduOMqhHtVzCzgvOoNutUfvn4Kyxv2MjPzzqUcv8+x6wo+YrHOo3Fq9Zzw58XcNohQ6mqHJh2OGa2HU481mn8YEYd5RIXf+KAtEMxsx1w4rFO4a/1b/JgzXLO/+i+7N2/V9rhmNkOOPFYyWtqbuGK6bWMGNiLL394dNrhmFk7nHis5N3+zCLmvbGWfztxHD0r/Iwcs2LnxGMl7e13NjN15nyO2G8Qx4/fM+1wzCwHTjxW0n48cx7rNjVx2cnjPR+bWYlw4rGSVft6A//7zCLO/uBIxu7VL+1wzCxHTjxWkiKCK6bX0L9XBd86bv+0wzGzneDEYyXpgZeW88zCVXz742MZ0Lt72uGY2U5w4rGSs7GxmR/MqOOAvfpx1uSRaYdjZjvJc7VZybnhiQUsXb2BO8+b4vnYzEqQr3ispCxdvYFfPlHPSQfvzZTRg9IOx8x2QV4Tj6QTJM2TVC/p4h2UO11SSKpK1isk3SrpRUl1ki5Jto+Q9JikWkk1ki7MOsaPJM2VNEfS7yUNyNp3SRLDPEnH57PNll/X3F9HBFxyoudjMytVeUs8ksqB64FPAOOAz0oat41y/YALgWeyNp8B9IiIg4HDgK9KqgSagIsiYhwwBTg/65gzgYMiYgIwH2hNVuOAM4HxwAnAL5LYrMQ8s+At7puzjK99ZF+G79477XDMbBfl84pnMlAfEQsiYjNwJ3DaNspdBVwLbMzaFkAfSd2AXsBmoCEilkXE8wARsRaoA4Yl63+KiKak/tPA8GT5NODOiNgUEQuB+iQ2KyHNLcH3p9cytH9PvvaRfdMOx8zeh3wmnmHA4qz1Jcm2LSRNAkZExIw2de8G3gGWAYuA6yJiVZu6lcChbH2l1OqLwAO5xmHF787nFlG3rIF/PelAenX3BatZKUttcIGkMmAqcNE2dk8GmoGhwCjgIkmjs+r2Be4BvhkRDW2O+29kbsndvpPxnCepWlL1ypUrd6otll9r1jdy3UPz+OCogZx08N5ph2Nm71M+E89SIPuh98OTba36AQcBj0t6lUyfzbRkgMFZwIMR0RgRK4CngC0DD8gkndsj4t7sN5R0LnAy8LmIiBzjACAiboyIqoioGjJkyK612PLiPx+ez5oNjVx+iudjM+sM8pl4ngPGSBolqTuZDv5prTsjYk1EDI6IyoioJNMvc2pEVJO5vXYMgKQ+ZJLSXGXOOjcBdRExNfvNJJ0AfC85xvqsXdOAMyX1kDQKGAM8m58mW0eb/8ZafvP0a3x28kjGDd0t7XDMrAPkLfEkHf0XAA+RGQRwV0TUSLpS0qntVL8e6CuphkwCuyUi5gBHAJ8HjpH0QvI6ManzczJXUTOT7b9K4qgB7gJqgQeB8yOiuWNba/kQEVw5vZY+3cu56ONj0w7HzDqI3r0jZa2qqqqiuro67TC6vIdqlvPV38zi+6eM49wjRqUdjpm1Q9KsiKhqr5xnLrCitLGxmatn1DJmj758bso+aYdjZh3Ic7VZUbrpLwtZvGoDv/3SB6ko9/cjs87E/6Ot6Cxfs5HrH6vn4+P25Mgxg9MOx8w6mBOPFZ1rH5xLU0tw6UnvmWHJzDoBJx4rKrNee5vf/30pX/nwKEYO8nxsZp2RE48VjZaWzOOs99ytB18/er+0wzGzPHHisaJx96wlzFmyhks+cSB9enjci1ln5cRjRaFhYyP/8dBcDttnd047ZGja4ZhZHvlrpRWFnz3yMm+9s5lbzp3s+djMOjlf8VjqXlm5jlueepVPHzaCg4f3TzscM8szJx5L3VX31dKropzvnuD52My6AiceS9Wjc9/g8XkrufBjYxjct0fa4ZhZATjxWGo2N7Vw1X11jB7Shy8cXpl2OGZWIE48lppbnlrIwjff4bKTx9G9m/8pmnUV/t9uqVixdiM/e7SeYw/Yg6PH7pF2OGZWQE48lor/eHAem5qaufRkz8dm1tU48VjBzV68mrtnLeGLR4xi1OA+aYdjZgXmxGMF1dISfH96DYP79uCCYzwfm1lX5MRjBfWHF5by90Wr+ZcTxtKvZ0Xa4ZhZCnJKPJKOkNQnWT5b0lRJfh6x7ZR1m5r44QNzmThiAKdPGp52OGaWklyveH4JrJc0EbgIeAW4LW9RWad0/WP1rFi7ie+fMo6yMs/HZtZV5Zp4miIigNOAn0fE9UC//IVlnc2rb77DTU8u5JOThnHoyN3TDsfMUpTr7NRrJV0CnA0cJakM8A16y9nVM+qoKBcXn3BA2qGYWcpyveL5DLAJ+FJELAeGAz/KW1TWqfx5/koernuDC44Zwx679Uw7HDNLWa6JZy3wk4h4UtL+wCHAHe1VknSCpHmS6iVdvINyp0sKSVXJeoWkWyW9KKkuudpC0ghJj0mqlVQj6cKsY5yRbGtpPU6yvVLSBkkvJK9f5dhm6wCNzS1ceV8tlYN688UjK9MOx8yKQK632v4MfFjS7sCfgOfIXAV9bnsVJJUD1wPHAUuA5yRNi4jaNuX6ARcCz2RtPgPoEREHS+oN1Eq6g8xV10UR8XxSb5akmckxXwI+CdywjXBeiYhDcmyrdaDb/vYa9SvW8esvVNGjW3na4ZhZEcj1ikcRsZ7Mif0XEXEGcFA7dSYD9RGxICI2A3eSGZzQ1lXAtcDGrG0B9JHUDegFbAYaImJZRDwPEBFrgTpgWLJeFxHzcmyPFcBb6zbxXw/P56j9h3DsgZ6Pzcwyck48kg4nc4UzI8e6w4DFWetLkm3ZB50EjIiIGWztbuAdYBmwCLguIla1qVsJHMrWV0rbM0rS3yU9IenDOZS3DnDdn+axYXMzl508zo+zNrMtcr3V9k3gEuD3EVEjaTTw2Pt542Rk3FTg3G3sngw0A0OB3YEnJT0cEQuSun2Be4BvRkRDO2+1DBgZEW9JOgz4g6TxbetJOg84D2DkyJG73jAD4KWla7jzucV88YhR7LdH37TDMbMiktMVT0Q8ERGnAtdL6pvcPvtGO9WWAiOy1ocn21r1I3O77nFJrwJTgGnJwICzgAcjojEiVgBPAVsGHpBJOrdHxL05xL4pIt5KlmeR+fHr/tsod2NEVEVE1ZAhQ9o7rO1ARPD9aTUM7N2dbxw7Ju1wzKzI5DplzsGS/g7UkOnonyVpfDvVngPGSBolqTtwJjCtdWdErImIwRFRGRGVwNPAqRFRTeb22jHJe/chk5TmKnO/5iagLiKm5hj7kGSgA8mV2hhgQS51bddMn7OM6tfe5rvHj6V/L//cy8y2lmsfzw3AtyNin4gYSWbanP/eUYWIaAIuAB4iMwjgruQ23ZWSTm3n/a4H+kqqIZPAbomIOcARwOeBY7KGR58IIOkfJS0BDgdmSHooOdZRwBxJL5DpO/pa2/4i6zjrNzdxzf11HDRsN86oGtF+BTPrcpSZCaedQtLsiJjY3rbOoqqqKqqrq9MOoyRN/dM8fvpoPf/3tcP5QOXAtMMxswKSNCsiqtorl+vgggWS/h34TbJ+Nr5dZW0sXrWeG/68gFMnDnXSMbPtyvVW2xeBIcC9yWtIss1si/93fx1lEpec6PnYzGz7crriiYi3gfZGsVkX9tdX3uSBl5Zz0XH7s3f/XmmHY2ZFbIeJR9J0MrMIbFMyxNq6uKbmFq6YVsvw3XvxlaNGpx2OmRW59q54ritIFFbS/vfZRcx7Yy2/OnsSPSs8H5uZ7dgOE09EPFGoQKw0vf3OZn78p/l8aN9BHD9+r7TDMbMSkFMfj6QXee8ttzVANXB168wA1vVMnTmfdZuauPyU8Z6Pzcxykutw6gfIzJ32v8n6mUBvYDnwP8ApHR6ZFb26ZQ3c/sxrfH7KPozdy09CN7Pc5Jp4PhYRk7LWX5T0fERMknR2PgKz4hYRXDG9hv69KvjWce+Z+s7MbLty/R1PuaTJrSuSPgC09iI3dXhUVvQeeGk5Ty9Yxbc/PpYBvbunHY6ZlZBcr3i+DNycPI5AQAPwpWQCz2vyFZwVp42NzfxgRh0H7NWPsyb7ERJmtnNy/QHpc8DBkvon62uydt+Vj8CseN345wUsXb2BO8+bQnmZBxSY2c7J9bEI/SVNBR4BHpH049YkZF3L66s38IvH6znp4L2ZMnpQ2uGYWQnKtY/nZmAt8Onk1QDckq+grHhd88BcIvB8bGa2y3Lt49k3Ik7PWr8ieb6NdSHPLlzF9Nmv841jxzB8995ph2NmJSrXK54Nko5sXZF0BLAhPyFZMWpuyTzOemj/nvzzR/ZNOxwzK2G5XvH8M3Br0q8jYBVwbr6CsuLzu+cWU7usgZ999lB6dfd8bGa263Id1fYCMFHSbsl6Q16jsqKyZn0j1/1pHpNHDeTkCXunHY6Zlbj2Hovw7e1sByAipuYhJisy//XIfFav38zlp4zzfGxm9r61d8XjCbi6uJffWMttf3uNMyePZPxQj6A3s/evvcciXFGoQKz4RARX3ldLn+7lfOfjY9MOx8w6iVxHtW0h6fl8BGLFZ2btGzz58pt867j9GdjH87GZWcfY6cRDZlSbdXIbG5u5ekYdY/boy9lT9kk7HDPrRHIdTp1tRodHYUXnpr8sZNGq9fz2Sx+konxXvp+YmW3bTp9RIuLSfARixWP5mo1c/1g9Hx+3J0eOGZx2OGbWyeQ6SehaSQ1tXosl/V7S6B3UO0HSPEn1ki7eQbnTJYWkqmS9QtKtkl6UVCfpkmT7CEmPSaqVVCPpwqxjnJFsa2k9Tta+S5IY5kk6Ppc2d2XXPjiXppbg0pPGpR2KmXVCud5q+y9gCZlHX4vMo6/3BZ4nM4Ho0W0rSCoHrgeOS+o+J2laRNS2KdcPuBB4JmvzGUCPiDhYUm+gVtIdwCbgooh4Pqk3S9LM5JgvAZ8Ebmhz/HFJvOOBocDDkvaPiOYc296lzHrtbX7/96Wc/9F9GTnI87GZWcfL9VbbqRFxQ0SsjYiGiLgROD4ifgfsvp06k4H6iFgQEZuBO4HTtlHuKuBaYGPWtgD6SOoG9AI2Aw0RsSwingeIiLVAHTAsWa+LiHnbOP5pwJ0RsSkiFgL1SWzWRktLcOX0GvbcrQdfP3q/tMMxs04q18SzXtKnJZUlr0/zbqKI7dQZBizOWl+SbNtC0iRgRES0HbBwN/AOsAxYBFwXEava1K0EDmXrK6VdiiM53nmSqiVVr1y5sp1Ddk53P7+E2UvWcMknDqRPj10Zd2Jm1r5cE8/ngM8DK4A3kuWzJfUCLtiVN5ZUBkwFLtrG7slAM5lbY6OAi7L7kpJHcN8DfLOj5o2LiBsjoioiqoYMGdIRhywpazc28h8PzuOwfXbntEOGph2OmXViuU4SugA4ZTu7/7Kd7UuBEVnrw5NtrfoBBwGPJ/N/7QVMk3QqcBbwYEQ0AiskPQVUAQskVZBJOrdHxL05hN9eHAb87NF63npnEzefW+X52Mwsr3Id1ba/pEckvZSsT5DU3rDq54AxkkZJ6k6mg39a686IWBMRgyOiMiIqgafJ9CVVk7m9dkzyXn2AKcBcZc6INwF1OzFB6TTgTEk9JI0CxgDP5li3S1iwch23PLWQMw4bzoThA9IOx8w6uVxvtf03cAnQCBARc8gkku2KiCYyt+EeIjMI4K6IqJF0ZXJVsyPXA30l1ZBJYLck73kEmdt8x0h6IXmdCCDpHyUtAQ4HZkh6KImjBrgLqAUeBM73iLatXXVfLT27lfPd4/04azPLv1x7kHtHxLNtbsE0tVcpIu4H7m+z7bLtlD06a3kdmSHVbcv8he1M2RMRvwd+v519PwB+0F68XdFjc1fw2LyV/NuJBzKkX4+0wzGzLiDXK543Je1LMoJN0qfIjDizEra5qYWr7qtl9JA+nPOhyrTDMbMuItcrnvOBG4EDJC0FFpIZ6WYl7H/+upAFb77DLf/0Abp383xsZlYYuSaepcAtwGPAQKABOAe4Mk9xWZ6tWLuRnz5SzzEH7MFHx+6Rdjhm1oXkmnj+CKwmM0XO6/kLxwrlRw/OY1NTM/9+sudjM7PCyjXxDI+IE/IaiRXM7MWr+b9ZS/jqUaMZNbhP2uGYWReT6439v0o6OK+RWEG0tATfn17D4L49uOAYz8dmZoWX6xXPkcC5khaSmSFaQETEhLxFZnnxx9lL+fui1fzoUxPo17Mi7XDMrAvKNfF8Iq9RWEG8s6mJHz4wl4kjBnD6pOFph2NmXVSuc7W9lu9ALP+uf6yeNxo28auzD6OszPOxmVk6/OONLuK1t97h108u5JOThnHoyO09QsnMLP+ceLqIq2fUUVEuLj7B87GZWbqceLqAJ19eyczaN7jgmDHssVvPtMMxsy7OiaeTa2xu4YrptewzqDdfPLIy7XDMzJx4Orvf/O016les49KTxtGjW3na4ZiZOfF0Zm+t28R/PjyfD48ZzMcO9HxsZlYcnHg6sev+NJ8Nm5u5/JRxfpy1mRUNJ55O6qWla7jzuUV84fBK9tujX9rhmJlt4cTTCUUEV0yvYWDv7lz4sTFph2NmthUnnk5o+pxlPPfq23zn+LH07+X52MysuDjxdDLrNzdxzf11jB+6G5+uGpF2OGZm75HrJKFWIn71xAKWrdnITz97KOWej83MipCveDqRJW+v54YnXuHUiUP5QOXAtMMxM9smJ55O5P/dX0eZxCUnej42MyteTjydxF9feZP7X1zO14/el73790o7HDOz7cpr4pF0gqR5kuolXbyDcqdLCklVyXqFpFslvSipTtIlyfYRkh6TVCupRtKFWccYKGmmpJeTP3dPth8taY2kF5LXZflscxqamlu4cnotw3fvxVeOGp12OGZmO5S3xCOpHLiezNNLxwGflTRuG+X6ARcCz2RtPgPoEREHA4cBX5VUCTQBF0XEOGAKcH7WMS8GHomIMcAjyXqrJyPikOR1ZQc2syjc8ewi5i5fy6UnHUjPCs/HZmbFLZ9XPJOB+ohYEBGbgTuB07ZR7irgWmBj1rYA+kjqBvQCNgMNEbEsIp4HiIi1QB0wLKlzGnBrsnwr8A8d3J6itHr9Zn48cz4f2ncQx4/fK+1wzMzalc/EMwxYnLW+hHeTBACSJgEjImJGm7p3A+8Ay4BFwHURsapN3UrgUN69UtozIpYly8uBPbOKHy5ptqQHJI3f5RYVoakz59OwoZHLPB+bmZWI1H7HI6kMmAqcu43dk4FmYCiwO/CkpIcjYkFSty9wD/DNiGhoWzkiQlIkq88D+0TEOkknAn8A3jOPjKTzgPMARo4c+T5bVxhzlzfw26df4+wp+3DAXrulHY6ZWU7yecWzFMj+6fzwZFurfsBBwOOSXiXTZzMtGWBwFvBgRDRGxArgKWDLwAMySef2iLg363hvSNo7KbM3sAIgIhoiYl2yfD9QIWlw22Aj4saIqIqIqiFDhrz/1udZRHDFtFp261XBt4/bP+1wzMxyls/E8xwwRtIoSd2BM4FprTsjYk1EDI6IyoioBJ4GTo2IajK3144BkNSHTFKaq8y9pJuAuoiY2ub9pgHnJMvnAH9M6u+V1EPSZDJtfisfDS6kB19azt8WvMVFx+3PgN7d0w7HzCxneUs8EdEEXAA8RGYQwF0RUSPpSkmntlP9eqCvpBoyCeyWiJgDHAF8Hjgma3j0iUmdHwLHSXoZ+FiyDvAp4CVJs4GfAmdGRFDCNjY2c/WMOg7Yqx+fnVwatwXNzFqpxM/BeVFVVRXV1dVph7FdP33kZabOnM8dX5nC4fsOSjscMzMAJM2KiKr2ynnmghLz+uoN/OLxek48eC8nHTMrSU48JeaaB+YSAf964oFph2JmtkuceErIswtXMX3263z1I/syfPfeaYdjZrZLnHhKRHNL5nHWQ/v35J8/sm/a4ZiZ7TInnhJxV/Vial5v4JITD6RXd8/HZmaly4mnBKzZ0MiPHprH5FEDOXnC3mmHY2b2vjjxlICfPPwyq9dv5nLPx2ZmnYATT5GrX7GW2/72KmdOHsn4of3TDsfM7H1z4iliEcEV02vp3b2c73x8bNrhmJl1CCeeIvZw3QqefPlNvnXc/gzs4/nYzKxzcOIpUpuamrl6Ri1j9ujL2VP2STscM7MO48RTpG76y0Jee2s9l50yjopyf0xm1nn4jFaE3mjYyM8free4cXvy4THF/2wgM7Od4cRThK59YC5NzcGlJ3k+NjPrfJx4iszzi97m3r8v5csfHsU+g/qkHY6ZWYdz4ikiLS3BFdNq2HO3Hpz/0f3SDsfMLC+ceIrIPc8vYfaSNVz8iQPo06Nb2uGYmeWFE0+RWLuxkWvrotviAAAKpUlEQVQfnMekkQP4h0OGpR2OmVne+Gt1kfj5o/W89c4mbj63yvOxmVmn5iueIrBg5TpufmohZxw2nAnDB6QdjplZXjnxFIGrZ9TRs1s53z3+gLRDMTPLOyeelD02bwWPzl3BN44dw5B+PdIOx8ws75x4UrS5qYWrptcyekgfzvlQZdrhmJkVhBNPim7966ssePMd/v3kcXTv5o/CzLoGn+1SsnLtJn76yMscc8AefHTsHmmHY2ZWMHlNPJJOkDRPUr2ki3dQ7nRJIakqWa+QdKukFyXVSbok2T5C0mOSaiXVSLow6xgDJc2U9HLy5+7Jdkn6aRLDHEmT8tnmXP3ooblsbGr2fGxm1uXkLfFIKgeuBz4BjAM+K2ncNsr1Ay4EnsnafAbQIyIOBg4DviqpEmgCLoqIccAU4PysY14MPBIRY4BHknWS9x+TvM4DftmBzdwlc5as5v9mLeGfjhjF6CF90w7HzKyg8nnFMxmoj4gFEbEZuBM4bRvlrgKuBTZmbQugj6RuQC9gM9AQEcsi4nmAiFgL1AGtP/M/Dbg1Wb4V+Ies7bdFxtPAAEl7d1Qjd1ZE8P1pNQzq04P/7xjPx2ZmXU8+E88wYHHW+hLeTRIAJLe9RkTEjDZ17wbeAZYBi4DrImJVm7qVwKG8e6W0Z0QsS5aXA3vmGkdyvPMkVUuqXrlyZS7t2yV/eGEpzy9azfdOGEu/nhV5ex8zs2KV2uACSWXAVOCibeyeDDQDQ4FRwEWSRmfV7QvcA3wzIhraVo6IIHPVlLOIuDEiqiKiasiQ/Dx87Z1NTfzwgblMHN6fT00anpf3MDMrdvlMPEuBEVnrw5NtrfoBBwGPS3qVTJ/NtGSAwVnAgxHRGBErgKeALQMPyCSd2yPi3qzjvdF6Cy35c0WOcRTMLx6v542GTVx+6njKyjwfm5l1TflMPM8BYySNktQdOBOY1rozItZExOCIqIyISuBp4NSIqCZze+0YAEl9yCSlucrMnnkTUBcRU9u83zTgnGT5HOCPWdu/kIxumwKsybolVzCL3lrPfz+5kE8eOoxJI3cv9NubmRWNvCWeiGgCLgAeIjMI4K6IqJF0paRT26l+PdBXUg2ZBHZLRMwBjgA+Dxwj6YXkdWJS54fAcZJeBj6WrAPcDywA6oH/Br7eca3M3dUzaulWJv7lE56Pzcy6NmW6QyxbVVVVVFdXd9jx/vLym5x90zN874SxfP1oj2Qzs85J0qyIqGqvnGcuyLPG5haumF7DPoN686UjR6UdjplZ6px48uy3T7/GyyvWcelJ4+jRrTztcMzMUufEk0dvrdvEf86cz4fHDOZjB3o+NjMzcOLJqx/PnM/6zc1cfso4P87azCzhxJMnNa+v4Y5nF/GFwyvZb49+aYdjZlY0nHjyICK4YlotA3t358KPjUk7HDOzouLEkwf3zVnGs6+u4jvHj6V/L8/HZmaWzYmng23Y3Mw199cxfuhufLpqRPsVzMy6GCeeDvbLJ17h9TUbufyU8ZR7PjYzs/dw4ulAS95ezw1PvMIpE4cyedTAtMMxMytKTjwdaHNTCx8cPYhLPB+bmdl2dUs7gM5k9JC+3PbFyWmHYWZW1HzFY2ZmBeXEY2ZmBeXEY2ZmBeXEY2ZmBeXEY2ZmBeXEY2ZmBeXEY2ZmBeXEY2ZmBaWISDuGoiNpJfDa+zjEYODNDgonTZ2lHeC2FKPO0g5wW1rtExFD2ivkxJMHkqojoirtON6vztIOcFuKUWdpB7gtO8u32szMrKCceMzMrKCcePLjxrQD6CCdpR3gthSjztIOcFt2ivt4zMysoHzFY2ZmBeXEs4sknSBpnqR6SRdvY38PSb9L9j8jqbLwUeYmh7acK2mlpBeS15fTiLM9km6WtELSS9vZL0k/Tdo5R9KkQseYqxzacrSkNVmfyWWFjjEXkkZIekxSraQaSRduo0xJfC45tqVUPpeekp6VNDtpyxXbKJO/c1hE+LWTL6AceAUYDXQHZgPj2pT5OvCrZPlM4Hdpx/0+2nIu8PO0Y82hLUcBk4CXtrP/ROABQMAU4Jm0Y34fbTkauC/tOHNox97ApGS5HzB/G/++SuJzybEtpfK5COibLFcAzwBT2pTJ2znMVzy7ZjJQHxELImIzcCdwWpsypwG3Jst3A8dKUgFjzFUubSkJEfFnYNUOipwG3BYZTwMDJO1dmOh2Tg5tKQkRsSwink+W1wJ1wLA2xUric8mxLSUh+btel6xWJK+2Hf55O4c58eyaYcDirPUlvPcf4JYyEdEErAEGFSS6nZNLWwBOT26D3C1pRGFC63C5trVUHJ7cKnlA0vi0g2lPcqvmUDLfrrOV3Oeyg7ZAiXwuksolvQCsAGZGxHY/l44+hznxWC6mA5URMQGYybvfgiw9z5OZnmQi8DPgDynHs0OS+gL3AN+MiIa043k/2mlLyXwuEdEcEYcAw4HJkg4q1Hs78eyapUD2t/7hybZtlpHUDegPvFWQ6HZOu22JiLciYlOy+mvgsALF1tFy+dxKQkQ0tN4qiYj7gQpJg1MOa5skVZA5Ud8eEfduo0jJfC7ttaWUPpdWEbEaeAw4oc2uvJ3DnHh2zXPAGEmjJHUn0/E2rU2ZacA5yfKngEcj6aUrMu22pc399lPJ3NsuRdOALySjqKYAayJiWdpB7QpJe7Xeb5c0mcz/5aL7YpPEeBNQFxFTt1OsJD6XXNpSQp/LEEkDkuVewHHA3DbF8nYO69YRB+lqIqJJ0gXAQ2RGhd0cETWSrgSqI2IamX+gv5FUT6aT+Mz0It6+HNvyDUmnAk1k2nJuagHvgKQ7yIwqGixpCXA5mU5TIuJXwP1kRlDVA+uBf0on0vbl0JZPAf8sqQnYAJxZpF9sjgA+D7yY9CcA/CswEkruc8mlLaXyuewN3CqpnExyvCsi7ivUOcwzF5iZWUH5VpuZmRWUE4+ZmRWUE4+ZmRWUE4+ZmRWUE4+ZmRWUE49ZSiSta7/UDuvfLWl0stxX0g2SXpE0S9Ljkj4oqbukPyc/ADQrCk48ZiUomQOsPCIWJJt+Tea3FmMi4jAyv4UZnEz8+gjwmXQiNXsvJx6zlCW/2P+RpJckvSjpM8n2Mkm/kDRX0kxJ90v6VFLtc8Afk3L7Ah8ELo2IFoCIWBgRM5Kyf0jKmxUFX36bpe+TwCHARGAw8JykP5P5pXwlMA7Yg8xURTcndY4A7kiWxwMvRETzdo7/EvCBvERutgt8xWOWviOBO5LZgt8AniCTKI4E/i8iWiJiOZmJHFvtDazM5eBJQtosqV8Hx222S5x4zErTBqBnslwDTEzm3dqeHsDGvEdllgMnHrP0PQl8Jnkw1xAyj71+FniKzAP4yiTtSWbS0FZ1wH4AEfEKUA1ckTUzcqWkk5LlQcCbEdFYqAaZ7YgTj1n6fg/MAWYDjwLfS26t3UPmaZy1wG/JPGRsTVJnBlsnoi8DewL1kl4C/ofMkyUBPpqUNysKnp3arIhJ6hsR65KrlmeBIyJiefIMlceS9e0NKmg9xr3AxRExvwAhm7XLo9rMitt9yQO7ugNXJVdCRMQGSZcDw4BF26ucPNzvD046Vkx8xWNmZgXlPh4zMysoJx4zMysoJx4zMysoJx4zMysoJx4zMysoJx4zMyuo/x+Cnh3OP7yVtwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# dict with classes as the keys, and the values as the grid of scores obtained during cross-validating each fold,\n",
    "# Each dict value has shape (n_folds, len(Cs))\n",
    "n_Cs = len(Cs)\n",
    "n_classes = 2\n",
    "scores =  np.zeros((n_classes-1,n_Cs))\n",
    "\n",
    "for j in range(n_classes-1):\n",
    "        scores[j][:] = np.mean(lr_cv_L2.scores_[1],axis = 0)\n",
    "    \n",
    "mse_mean = -np.mean(scores, axis = 0)\n",
    "pyplot.plot(np.log10(Cs), mse_mean.reshape(n_Cs,1)) \n",
    "#plt.plot(np.log10(reg.Cs)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "pyplot.xlabel('log(C)')\n",
    "pyplot.ylabel('neg-logloss')\n",
    "pyplot.show()\n",
    "\n",
    "\n",
    "#print ('C is:',lr_cv.C_)  #对多类分类问题，每个类别的分类器有一个C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
